Amazon API Gateway を使って AWS 以外のサービスの API をラップする
Amazon API Gateway!!!!
AWS Summit 2015 NewYork で発表&ローンチされた新サービス「API Gateway」。社内でも社長を筆頭に愉しみながら触れています。
Amazon Lambda と連係させることで、Lambda Function を HTTP 形式の API にできるところに注目が集まっていますが、API Gateway ではそれだけではなく、外部の HTTP プロキシの API の呼び出しや各 AWS サービスの API の呼び出しも可能です。API Gateway はいろいろな可能性に満ちあふれています。
ということで今回は HTTP プロキシの API との連係機能を使って、OpenWeatherMap のラッパー的な API を作成してみたいと思います。
API の作成
それでは、API を作成していきましょう。まずはじめに「Get Started」をクリックします。
API name を適当に決めます。Description は任意項目なので入力しなくても構いません。終わったら「Create API」をクリックしましょう。
Resource の作成
次に Resource を作成します。「Create Resource」をクリックします。
Resource Name は Weather
としました。Resource Name を入力すると Resource Path も自動的に入力されます。気に入らない場合は変更できます。終わったら「Create Resource」をクリックします。
Method の作成
次は Method を作成です。今回は GET の Method を作成してみましょう。「Create Method」をクリックすると、左側の Resource の weather
にドロップダウンが表示されます。その中から GET
を選んでチェックマークをクリックします。
出来上がったら GET をクリックします。すると Method の設定画面が表示されます。ここは、GET の Method が呼び出されたら、何を行うか 設定する画面です。
Integration type は実際に行うアクションの設定です。Lambda Function の呼び出し、HTTP リクエスト、各種 AWS サービスの API 呼び出しから選択できます。今回は HTTP Proxy
を設定しました。HTTP Proxy
を選択した場合は、HTTP method と Endpoint URL を設定する必要があります。今回は OpenWeatherMap の天気の情報を取得する API を設定しています。終わったら「Save」をクリックします。
保存が終わると、次のような画面が表示されると思います。この画面は Method Execution と呼び、Method 全体の設定を一覧できるとともに各種設定画面に遷移できる画面です。下図には、画面の構成の説明を入れてみました。
リクエストパラメータの設定
次にリクエストパラメータを設定します。
今回は OpenWeatherMap の API を間接的に叩く形になっていますが、OpenWeatherMap は ?q=London
といったように q
のリクエストパラメータを付与することで、指定した地域の天気情報が取得できるようになっています。API Gateway では 作成した API のリクエストパラメータを定義して、Integration 先のリクエストパラメータに変換することができます。
Method 作成後、下図のような画面が表示されていると思います。この中の「Method Request」をクリックします。
この中の URL Query String Parameters を開き Add query string をクリックします。すると名前が入力できるようになるので、実際のリクエストパラメータにしたい名前を入力します。今回は location
としました。入力したら右端にあるチェックマークをクリックします。
次に先ほどの Method Execution 画面に戻り、今度は Integration Request を開きます。
Integration Request 画面は、Method が受け取った値を Integration 先のリクエストに変換する設定を行う画面です。先ほど定義した location
を q
に変換します。
URL Query String Parameters を開き、Add query string をクリックします。入力欄が出てくるので、Name に q
、Mapped from に method.request.querystring.location
を入力します。
チェックマークをクリックして完了です。
API のテスト
それではテストしてみましょう。Method Execution 画面に戻り、TEST を開きます。
Query Strings に location
が表示されています。Tokyo
と入力して「TEST」をクリックします。
東京の天気情報が取得できました!
デプロイ
最後にデプロイまで行ってみましょう。Method Execution 画面に戻り、「Deploy API」をクリックします。
デプロイ先の設定を行います。Deployment Stage は New Stage
を選択し Stage name は prod
とします。Stage name は URL の一部になります。Stage description と Deployment description は任意項目です。終わったら「Deploy」をクリックします。
青枠の Invoke URL に書かれている URL が、作成した API のエンドポイントです。
ここに /weather?location=Tokyo を付け足してリクエストすると、東京の天気が取得できます!
まとめ
今回は単純なラッパーを作成してみました。この機能を使うと、リクエストパラメータの名前を変更したり、リクエストパラメータをリクエストヘッダーに変換したり、GET を POST にしてみたり、HTTP ステータスを別なステータスに変換したり、レガシーな API をいい感じに修正したりといったような、既存の API をいろいろとカスタマイズできます。
API Gateway に寄せることで、アプリケーションで使用するさまざまな API をひとつの形式に統一できる点が、最大のメリットだと思います。
Developers.IO では、今後も API Gateway に関する記事をどしどし掲載する予定です。お楽しみに!